Parsec Relay Serverを使ってリモートPCへの接続を中継する
Parsec for TeamsのEnterpriseを購入すると、High performance relay serverというものが使えるようになります。
これはすべてのParsecトラフィックを1つのパブリックIPアドレスを介してルーティングする、ファイアウォール/NAT設定を管理するためのソリューションとして利用できます。
軽量のサーバープログラムが提供されていて、仮想サーバーや物理サーバーにインストールして使うことができます。
使ってみよう
本記事ではAmazon linux2(t3.medium )でのインストールを試しています
前提条件の確認
サーバーの最小仕様
- 2コア
- 4GB RAM
- 1gbps + NIC
サポートされているオペレーティングシステム:
- Ubuntu 18.04 , Ubuntu 20.04 ,RHEL 7 ,RHEL 8 ,CentOS 7 ,CentOS 8
ダウンロード
Teams Global AppSettingsページからリレーサーバーのダウンロードURLをコピーします。
サーバーにsshでログインし、以下のコマンドを実行します
wget <リレーダウンロードURL> tar -xf <relay.tar.gz> cd parsechpr1.0
インストール
sudo cp parsechpr /bin sudo cp parsechpr.service /etc/systemd/system
設定
parsechpr.serviceを編集します。
vi /etc/systemd/system/parsechpr.service
ファイルを開いた後、ExecStart の部分を書き換えます 。
構文は以下です。
ExecStart=/bin/parsechpr [パブリックIPアドレス] [WAN/パブリックインターフェイスポート] [LAN/内部インターフェイスポート]
例)ExecStart=/bin/parsechpr 1.2.3.4 5000 4900
サービスの起動
sudo systemctl start parsechpr sudo systemctl enable parsechpr
起動しているか確認
sudo systemctl status parsechpr ● parsechpr.service - Parsec High Performance Relay Loaded: loaded (/etc/systemd/system/parsechpr.service; disabled; vendor preset: disabled) Active: active (running) since Fri 2021-08-06 02:49:35 UTC; 6s ago Main PID: 2650 (parsechpr) CGroup: /system.slice/parsechpr.service └─2650 /bin/parsechpr [パブリックIP] [WAN/パブリックインターフェイスポート] [LAN/内部インターフェイスポート] Aug 06 02:49:35 ip-10-10-100-214.ap-northeast-1.compute.internal systemd[1]: Started Parsec High Performance Relay.
parsec for teamsの管理画面での設定
Teams Global AppSettingsページで、relay serverのプライベートIP
とプライベートポート
を入力します.
このページで設定すると、すべてのホストのリレーがこのアドレスとなります。
ホスト個別で設定する場合
ホスト個別で設定する場合は、ホストで設定を編集することで可能になります。
設定ファイルは C:\ProgramData\Parsec\config.txt
です。
app_stun_addressという項目を追加し、parsecサービスを再起動しましょう。
app_stun_address = `relay serverのプライベートIP`@`プライベートポート`
※ 最大10個のaddress@portペアを、コンマで区切って構成できます
複数のリレーサーバーが使用可能な場合、Parsecは接続の試行ごとにランダムにリレーサーバーを選択するとのことです
リモートPCに接続できるか確認
クライアントPC(macOS) <====> Relay server <====> EC2 リモートホスト(windows)
上記の構成で接続できるか確認します。
Relay serverでポートを許可
今回の検証では以下のポートを許可して動作を確認していました。
- インバウンド
- 4900 UDP <<プライベートネットワークのCIDR>>
- 5000 UDP <<クライアントPCのGIP>>
- アウトバウンドは全て
リモートホストでポートを許可
- インバウンド
- 0 - 65535 UDP <<Relay serverのプライベートIP>>
- アウトバウンドは全て
上記の状態でParsecで接続してみると、成功するはずです。
※ クライアント側からParsecでアクセスを試みると、Relay serverのmessagesに以下のような出力があります。
Aug 6 08:20:46 ip-10-10-100-214 parsechpr: qViy7g:uaYsgw added to map Aug 6 08:20:47 ip-10-10-100-214 parsechpr: qViy7g:uaYsgw paired
すべてのP2PトラフィックをRelay server経由で強制する場合は、ホストのconfig.txt
またはレジストリに次の行を追加して、Parsecを再起動します。
app_force_relay = 1
※Parsecを再起動しても挙動が変わらない場合は、サーバー自体を再起動してみます
強制している状態で、Relay serverをstopしているともちろんホストには接続できませんでした。
多数の同時接続を効率的に中継できるようなソリューションのため、ファイアウォール/NAT設定を厳しくしたいときに使えそうですね。